package src;

public class Quais {
	private int nbVoies;
	private Trains[] tableVoies;
	private int nbVoiesLibre;
	private Gare gare;

	public Quais(int nb, Gare g)
	{
		this.nbVoies = nb;
		tableVoies = new Trains[nb];
		nbVoiesLibre = nbVoies;
		this.gare = g;
	}
	
	public synchronized int arriveeTrain(Trains t)
	{
		while(nbVoiesLibre ==0)
		{
			try {wait();} catch(InterruptedException e){} 
		}
		int i =0;
		int numeroVoie =0;
		while(i<nbVoies)
		{
			if (tableVoies[i] == null) 
			{
				tableVoies[i] = t;
				notifyAll();
				nbVoiesLibre = nbVoiesLibre -1;
				numeroVoie = i;
				this.gare.getAccueil().ajoutPlaces(t.getPlacesLibres());
				break;
			}
			else{i++;}
		}
		return numeroVoie;
	}
	
	public synchronized void departTrain(int numeroVoie)
	{	
		this.gare.getAccueil().retirePlaces(tableVoies[numeroVoie].getPlacesLibres());
		tableVoies[numeroVoie]=null;
		nbVoiesLibre = nbVoiesLibre +1;
		notifyAll();
	}
	
	public synchronized boolean prendreTrain()
	{
		int i = 0;
		while(i<nbVoies)
		{
			if(tableVoies[i] != null && tableVoies[i].getPlacesLibres() >0)
			{
				tableVoies[i].setPlacesLibres(tableVoies[i].getPlacesLibres()-1); 
				System.out.println("Un voyageur prend le train en voie "+i);
				return true;
			}
			else
			{
				i++;
			}
		}
		return false;
	}
		
	
	public synchronized void attendreTrain()
	{
		while(!prendreTrain())
		{
			System.out.println("Un voyageur attend train");
			try {wait();} catch(InterruptedException e){} 		
		}
	}
}
